#ifndef TASKITEMWIDGET_H
#define TASKITEMWIDGET_H

#include <QWidget>
#include <QCheckBox>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include "plan/PlanTask.h"

/**
 * @brief 任务项UI组件
 * 支持拖拽排序、状态切换、编辑、删除等操作
 */
class TaskItemWidget : public QWidget
{
    Q_OBJECT
    
public:
    explicit TaskItemWidget(const PlanTask& task, QWidget *parent = nullptr);
    ~TaskItemWidget();
    
    /**
     * @brief 获取任务对象
     */
    PlanTask getTask() const { return m_task; }
    
    /**
     * @brief 更新任务显示
     */
    void updateTask(const PlanTask& task);
    
    /**
     * @brief 设置是否高亮显示（被选中或拖拽时）
     */
    void setHighlighted(bool highlighted);
    
    /**
     * @brief [FDD-2025-03-015] 设置紧凑模式（隐藏按钮，使用右键菜单）
     */
    void setCompactMode(bool compact);
    
signals:
    /**
     * @brief 任务状态已切换
     * @param taskId 任务ID
     * @param completed 是否完成
     */
    void statusToggled(const QString& taskId, bool completed);
    
    /**
     * @brief 请求编辑任务
     * @param task 任务对象
     */
    void editRequested(const PlanTask& task);
    
    /**
     * @brief 请求删除任务
     * @param taskId 任务ID
     */
    void deleteRequested(const QString& taskId);
    
    /**
     * @brief 请求为任务启动计时器
     * @param task 任务对象
     */
    void timerRequested(const PlanTask& task);
    
protected:
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
    void paintEvent(QPaintEvent *event) override;
    void contextMenuEvent(QContextMenuEvent *event) override;  // [FDD-2025-03-015] 右键菜单
    
private:
    void setupUi();
    void updateDisplay();
    QString formatTimeRange() const;
    
private:
    PlanTask m_task;                    // 任务数据
    
    // UI组件
    QCheckBox* m_checkBox;              // 完成状态复选框
    QLabel* m_timeLabel;                // 时间标签
    QLabel* m_titleLabel;               // 标题标签
    QPushButton* m_timerBtn;            // 计时器按钮
    QPushButton* m_editBtn;             // 编辑按钮
    QPushButton* m_deleteBtn;           // 删除按钮
    
    // 拖拽相关
    bool m_dragging;                    // 是否正在拖拽
    QPoint m_dragStartPosition;         // 拖拽起始位置
    
    // 显示状态
    bool m_highlighted;                 // 是否高亮显示
    bool m_compactMode = false;         // [FDD-2025-03-015] 紧凑模式标志
};

#endif // TASKITEMWIDGET_H

